package com.Webserver.controller;

import com.Webserver.http.HttpRequest;
import com.Webserver.http.HttpResponse;
import com.Webserver.vo.User;

import java.io.*;

/**
 * 用来处理和用户相关的业务操作
 */
public class UserController {
    //保存所有用户信息的目录的名字
    private static String userDirName = "./users/";

    static {
        //程序加载时判断一下保存所有用户信息的的目录是否存在，不存在先自动创建出来.
        File userDir = new File(userDirName);
        if (!userDir.exists()) {
            userDir.mkdirs();
        }
    }

    /**
     * 用来处理用户注册操作
     *
     * @param request
     * @param response
     */
    public void reg(HttpRequest request, HttpResponse response) {
        System.out.println("开始处理用户注册...");
        /**1.从request中获取用户表单上提交的注册信息*/

        //注:request.getParameter()获取表单某输入框上的内容要传递的参数为该输入框name=""属性指定
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String nickname = request.getParameter("nickname");
        String ageStr = request.getParameter("age");
        System.out.println(username + "," + password + "," + nickname + "," + ageStr);
        /*
            必要的验证工作，保证注册的四个信息不为空，否则直接响应注册失败的提示页面.
            失败页面:reg_error.html 居中显示一行字:注册失败，输入信息有误，请重新注册.
         */
        if (username == null || password == null || nickname == null || ageStr == null || ageStr.matches("[1-9]+")) {
            System.out.println("注册失败，输入信息有误，请重新输入...");
            response.setEntity(new File("./webapps/myweb/reg_error.html"));
            return;
        }
        /* 判断是否为重复用户，如果是重复用户则为直接响应页面:reg_have_user.html
         *   该页面居中显示一行字:该用户已存在，请重新注册.
         */
        File file = new File(userDirName + username + ".obj");
        if (file.exists()) {
            System.out.println("该用户已存在，请重新输入...");
            response.setEntity(new File("./webapps/myweb/reg_have_user.html"));
            return;
        }
        int age = Integer.parseInt(ageStr);
        /**2.将该用户信息写入磁盘保存*/
        User user = new User(username, password, nickname, age);
        try (
                ObjectOutputStream oos = new ObjectOutputStream(
                        new FileOutputStream(userDirName + username + ".obj")
                );
        ) {
            oos.writeObject(user);
            //注册成功,
            response.setEntity(new File("./webapps/myweb/reg_success.html"));

        } catch (IOException e) {
            e.printStackTrace();
        }
        /**3.设施response响应注册结果页面*/
        System.out.println("用户注册处理完毕!!!");
    }

    public void login(HttpRequest request, HttpResponse response) {
        System.out.println("等待用户登录...");
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        System.out.println("用户名:" + username + "密码:" + password);

        if (username == null || password == null) {
            response.setEntity(new File("./webapps/myweb/login_error.html"));
            return;
        }

        File file = new File(userDirName + username + ".obj");
        if (file.exists()) {
            try (
                    ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));
            ) {
                User user = (User) ois.readObject();
                String code = user.getPassword();
                System.out.println(user);
                if (password.equals(code)) {
                    response.setEntity(new File("./webapps/myweb/login_success.html"));
                    System.out.println("登录成功!!");
                    return;
                }
            } catch (IOException | ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
        response.setEntity(new File("./webapps/myweb/login_fail.html"));
        System.out.println("登录处理完毕!!");
    }
}
